package main

import "fmt"

// 数组相关的测试类
func arrTest() {
	// go支持多维数组每一个纬度的长度不一样
	fmt.Println()
	fmt.Println("=========arrTest========")
	fmt.Println()
	var intArr [5]int
	intArr = [5]int{1, 2, 3, 4, 5}
	for i, item := range intArr {
		fmt.Println(i, item)
	}

	// 数组中 int 和float默认是0，引用类型默认是nil
	var intArr2 = []int{1, 2, 3, 4}
	for i, item := range intArr2 {
		fmt.Println(i, item)
	}

	// 不确定长度用...  go会自动推断
	var intArr3 = [...]int{1, 2, 3, 4}
	for i, item := range intArr3 {
		fmt.Println(i, item)
	}
	fmt.Println(len(intArr3))

	// 初始化索引1的数组元素为2，初始化索引3的数组元素为4
	intArr4 := [5]int{1: 2, 3: 4}
	for i, item := range intArr4 {
		fmt.Println(i, item)
	}

	// 多维数组
	arrArr := [][]int{}
	row1 := []int{1, 2}
	row2 := []int{3, 4, 5}
	arrArr = append(arrArr, row1)
	arrArr = append(arrArr, row2)
	fmt.Println(arrArr[0])
	fmt.Println(arrArr[1])
	fmt.Println(arrArr[0][0])

	// 初始化多维数组
	arrArr2 := [][]int{
		{1, 2, 3, 4},
		{2, 2, 3, 4},
		{3, 2, 3, 4},
		{4, 2, 3, 4},
	}
	fmt.Println(arrArr2)

	// 手动初始化多维数组
	arrArr3 := [2][2]string{}
	arrArr3[0][0] = "google"
	arrArr3[0][1] = "facebook"
	arrArr3[1][0] = "twitter"
	arrArr3[1][1] = "ins"
	fmt.Println("%+v", arrArr3)

	fmt.Println(arrToFunc(intArr4))
	fmt.Println(newArrToFunc(intArr2))
}

// 入参数组定义了大小
func arrToFunc(a [5]int) int {
	sum := 0
	for item := range a {
		sum += item
	}
	return sum
}

// 入参数组不限制大小 需要数组定义的时候也是类似于 a := []int{1,2,3}这种
func newArrToFunc(a []int) int {
	sum := 0
	for i, item := range a {
		i++
		sum += item
	}
	return sum
}
